#pragma once

#include "ICollideAble.h"

////////////////////////////////////////////////////////////////////////////////////////////////////
/// <Summary>	Ray  </Summary>
/// 
/// <purpose>
/// 	Collidable class that defines a starting point and infinite line from it
/// </purpose>
////////////////////////////////////////////////////////////////////////////////////////////////////

class Ray : public ICollideAble
{
public:

	/// <Summary> The start point for this ray	</Summary>
	Vector3 start;
	/// <Summary> The direction this ray points in	</Summary>
	Vector3 direction;

public:

	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <Summary>	Default constructor. </Summary>
	////////////////////////////////////////////////////////////////////////////////////////////////////
	Ray() { }

	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <Summary>	Virtual Destructor </Summary>
	////////////////////////////////////////////////////////////////////////////////////////////////////
	virtual ~Ray() { }

public:

	/// <Summary> The collision type of this object </Summary>
	static const HashString COLLISIONTYPE;

	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <Summary>	Gets the collision type </Summary>
	///
	/// <Return>	The collision type </Return>
	////////////////////////////////////////////////////////////////////////////////////////////////////
	virtual const HashString& GetCollisionType() const { return COLLISIONTYPE; }

protected:

	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// <Summary>	Prints this object to the console </Summary>
	///
	/// <Param name="out">	The console window </Param>
	///
	/// <Return>	The console window </Return>
	////////////////////////////////////////////////////////////////////////////////////////////////////
	virtual ConsoleWindow& Print(ConsoleWindow& out) const;
};